#include <iostream>

using namespace std;

struct MyException : public exception
{
    // const throw() 不是函数，这个东西叫异常规格说明，表示 what 函数可以抛出异常的类型，
    // 类型说明放到 () 里，这里面没有类型，就是声明这个函数不抛出异常，
    // 通常函数不写后面的就表示函数可以抛出任何类型的异常。
  
    //     在 C++11 中，声明一个函数不可以抛出任何异常使用关键字 noexcept。
    // void mightThrow(); // could throw any exceptions.
    // void doesNotThrow() noexcept; // does not throw any exceptions
    const char *what() const throw()
    {
        return "c++ exception";
    }
};

int main()
{
    try
    {
        throw MyException();
    }
    catch (MyException &e)
    {
        cout << "MyException caught" << endl;
        cout << e.what() << endl;
    }
    catch (exception &e)
    {
        //其他错误
    }
    return 0;
}